package legumes.client.ui.admin.stall;

import legumes.client.services.callbacks.ParseStallMailCallback;
import legumes.client.services.util.rpc.RPCCallSequencer;
import legumes.shared.domain.Stall;

import com.google.gwt.core.client.GWT;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.layout.VLayout;

public class StallMailImportDlg extends Window {

	public StallMailImportDlg(final AdminStallPanel merchantPanel_) {
		super();
		setTitle("Importer l'&eacute;talage à partir du mail mara&Icirc;cher");
		setWidth(800);
		setHeight(500);
		setAutoCenter(true);
		setMargin(20);
		
		Label infoLabel = new Label();
		infoLabel.setWidth100();
		infoLabel.setContents("Copiez dans la zone de texte ci-dessous le contenu du mail du maraîcher; "
						+ "puis cliquez sur <i>Importer</i>. <br>"
						+ "Attention, l'étalage actuel va être <b>remplacé</b> par celui défini dans le mail !<br>"
						+ "Les éventuelles lignes incomprises vous seront signalées afin que vous les saisissiez manuellement.<p>"
						+ "<b>Le menu n'est pas rempli automatiquement</b>, merci de le définir manuellement.");
		
		final DynamicForm formPanel = new DynamicForm();
		formPanel.setMargin(5);
		formPanel.setNumCols(4);
		formPanel.setWidth100();
		formPanel.setHeight100();
		
		final TextAreaItem mailContentTextField = 
			new TextAreaItem("mailContent", "Mail");
		mailContentTextField.setWidth("100%");
		mailContentTextField.setColSpan(4);
		mailContentTextField.setHeight("*");
		mailContentTextField.setShowTitle(false);
		
		ButtonItem importBtn = new ButtonItem("Importer");
		importBtn.setAlign(Alignment.RIGHT);
		importBtn.setEndRow(false);
		importBtn.setColSpan(2);
		importBtn.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				String mailContent = mailContentTextField.getValueAsString();

				final RPCCallSequencer callSequencer = new RPCCallSequencer();
				
				GWT.log("Import de l'étalage en cours...Merci de patienter...");
				GWT.log("50, Analyse du mail...");

				final ParseStallMailCallback parseStallMailCallback = new ParseStallMailCallback(
						mailContent);
				callSequencer.addCall(parseStallMailCallback);

				callSequencer.addRunnable(new Runnable() {
					public void run() {
						GWT.log("75 Création de l'étalage...");
						Stall importedStall = parseStallMailCallback.getStall();

						Stall originalStall = merchantPanel_.getSellSession().getStall();
						originalStall.setStall(importedStall);

						GWT.log("90 Affichage de l'étalage...");
						merchantPanel_.onStallChanged();
						GWT.log("Done");
						StallMailImportDlg.this.hide();

						if (!importedStall.getImportMisunderstoodLines()
								.isEmpty()) {
							ParseStallMailReportWnd reportWnd = new ParseStallMailReportWnd(
									importedStall);
							reportWnd.show();
						}
					}
				});

				callSequencer.callSequence();
			}
		});
		ButtonItem cancel = new ButtonItem("annuler", "Annuler");
		cancel.setAlign(Alignment.RIGHT);
		cancel.setStartRow(false);
		cancel.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				StallMailImportDlg.this.hide();
			}
		});
		
		formPanel.setItems(mailContentTextField, importBtn, cancel);

		VLayout vl = new VLayout();
		vl.setWidth100();
		vl.setHeight100();
		vl.setMembers(infoLabel, formPanel);
		
		addItem(vl);
		mailContentTextField.focusInItem();
	}

}
